Tableau 10 新機能 : クロスデータソースフィルター #tableau
Tableau 10 新機能紹介シリーズ、当エントリは『クロスデータソースフィルター(Cross data source filters)』に関する、正式リリース前の先取り内容紹介となります。
「クロスデータソースフィルター」とは?
クロスデータソースフィルターとは、ひとことで言えば「複数のデータソースにまたがるフィルターを設定できる」というものです。機能を説明した情報は、2016年6月16日時点で以下の2件があります。
- Tableau 10.0 Beta Cross data source filtering(説明動画)
- As Requested, You Can Filter across Data Sources in Tableau 10|Tableau blog
フィルタの基本、復習
クロスデータソースフィルターを理解するためには、そもそものフィルターの挙動を押さえておく必要があります。現行バージョンである9.3でおさらいしてみます。
同じデータソースAから異なる設定の2つのフィルター付きワークシート、ワークシートAとワークシートBを作成します。 次に、別のデータソースCからもフィルタ付きワークシートCを作成します。
そして、この3つのワークシートをダッシュボードでまとめます。 この時、ダッシュボードにもワークシートで設定したフィルターが表示されますが、何も追加設定しない場合は、フィルターとビューの対応関係は1:1です。つまり、あるフィルターを操作しても、その影響が及ぶのはフィルターが設定されているビューだけに限定されます。
9.3までは、フィルターの設定項目「ワークシートに適用」を変更することで、同じデータソースを使用する全てのビューにフィルタの操作結果を反映させることができました。
下図のように、ワークシートに適用する設定は、各ビューのフィルタを右クリックすることや、ダッシュボード上のフィルターメニューから変更することができるようになっています。
これで、フィルタを変更するとビューも連動して変化する、という動きが可能になります。
しかし、データソースが異なる場合は、フィルタによってビューを連動させることができません。つまり「異なるデータソースに共通のフィルタは掛けられなかった」という訳です。
10.0でどう変わったのか
先ほどまでの説明で、あるデータソースにおけるフィルターの設定が異なるデータソースに働かない、ということがご理解頂けたかと思います。しかしTableauでは元々、複数のデータソースを利用する場合の各フィールドのリレーションシップ情報を持っており、この情報でデータソース間のフィールドの関連性を把握することができています。
これを使って10.0では、異なるデータソースの同じフィールドに対してフィルター設定を掛けることができるようになっています。
機能確認
早速こちらの機能を試してみます。 今回はさしあたりTableau Desktop 9 Qualified Associate試験対策資料記載のデータを少しアレンジして、データソースを下図の様に構成しました。
データロード
上記Excelシートから、顧客区分が「法人」「小規模事業所」のデータだけをTSVファイルとして出力し、以下のテーブルにロードしました。
DROP TABLE IF EXISTS orders; CREATE TABLE orders ( line_id INT NOT NULL, priority VARCHAR(12) NOT NULL, discount_rate DOUBLE PRECISION, unit_price DOUBLE PRECISION, shipping_cost DOUBLE PRECISION, customer_id INT NOT NULL, customer_name VARCHAR(28) NOT NULL, ship_mode VARCHAR(21) NOT NULL, customer_segment VARCHAR(12) NOT NULL, product_category VARCHAR(12) NOT NULL, product_sub_category VARCHAR(48) NOT NULL, product_container VARCHAR(18) NOT NULL, product_name VARCHAR(100) NOT NULL, base_margin DOUBLE PRECISION, area VARCHAR(6) NOT NULL, prefecture VARCHAR(20) NOT NULL, city VARCHAR(20) NOT NULL, zip_code VARCHAR(5) NOT NULL, order_date DATE NOT NULL, ship_date DATE NOT NULL, profit DOUBLE PRECISION, quantity SMALLINT NOT NULL, sales DOUBLE PRECISION, order_id INT NOT NULL ); COPY orders FROM 's3://xxxxxxxx/Sample-Superstore-Subset-Excel-ja-JP-company.tsv' CREDENTIALS 'aws_access_key_id=xxxxxxxx;aws_secret_access_key=xxxxxxxx' DELIMITER '\t' IGNOREHEADER 1;
そして、顧客区分が「自営業」「消費者」のデータだけを抽出し、先頭行のカラム名を上記Redshiftのカラム名に変更した上で、Excelファイルとして保存しました。
ワークシート、ダッシュボードの準備
以下の操作で、州毎の法人売上を表示するワークシート"COMPANY"を作成します。
- データソースRedshiftを選択し、ordersテーブルを追加
- 新規ワークシートに"COMPANY"と名をつけ、列にsales、行にprefectureをドロップ
- マークの"色"にproduce_categoryをドロップして、売上のグラフを製品カテゴリ毎に色分け
- areaをフィルターにドロップし、フィルタを表示する
新しいワークシートを作成し、名前を"INDIVIDUAL"とします。そしてこのシートに新しいデータソースを追加します。
- 新規ワークシートを追加し、"INDIVIDUAL"と命名
- Tableau画面左上"データ"メニューから、新しいデータソースを選択
- Excelファイルで新しいデータソースを追加
- (ここで自動的にリレーションシップが設定される)
- 列にsales、行にprefectureをドロップ
- マークの"色"にproduce_categoryをドロップして、売上のグラフを製品カテゴリ毎に色分け
- areaをフィルターにドロップし、フィルタを表示する
そして、上記2つのワークシートをダッシュボードにまとめます。これはドラッグ&ドロップするだけなので簡単です。
クロスデータソースフィルターを設定する
さて、ここで10.0の新機能が登場です。下記写真の様に、ダッシュボードを構成するワークシートの一つを開き、フィルターを右クリックします。すると、新しいメニュー"All Using Related Data Sources"が選択できます。
これを選択することで、異なるデータソースであっても共通のフィルターを設定することができます。 フィルターが設定されていると、下図の様にフィルターにアイコンが付き、別データソースと共通のフィルターが設定されていることを示します。
ダッシュボードを構成する他のワークシートの設定も見てみると、このように別のデータソース(オレンジの印が付いている)におけるフィルターが設定されている旨の表示となります。
このクロスデータソースフィルターの設定は、ダッシュボードに設定されたフィルターの設定メニューからでも行なえます。
注意点
さて、このクロスデータソースフィルターの設定ですが、一つ注意点があります。それは「フィルタに使われるデータはUNIONされない」ということです。どういうことかは下図をご覧ください。
今回の例で話しますと、そもそも法人テーブルのcustomer_segmentカラムには「法人」「中小企業」しか入っていません。対してExcelワークシートのcustomer_segmentには「自営業」「消費者」しかデータが入っていません。フィルターはデータソースに含まれているデータで作成されるので、それぞれ片方のデータソースしか無いデータでフィルタリングを行うのは、単純には難しいということになります。
実際に設定をした例が下図です。ご覧のとおり、フィルタは現在のデータソースに入っている値でしか構成されないので、法人テーブルと、個人Excelシートでフィルタの値が異なっています。
対応法もなくは無いのですが、フィルタの値をテーブルの内容と関係なく固定値で持つ等の対処になるので柔軟性に欠けます。予め両方のデータソースに存在するデータでフィルターを作成する方法が一番無難と言えるでしょう。
まとめ
以上、Tableau 10の新機能『クロスデータソースフィルター』に関するご紹介でした。概念を理解するのが少し難しかったですが、別に紹介した新機能クロスデータベースジョインと組み合わせると、この機能の有効性、必要性がわかる気がしました。それでは、また。